/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Rennan
 */
public class Departamento {
    
    // seria mais melhor trabalhar com Map
    private List<Professor> professores;
    private List<Turma> turmas;
    
    
    public Departamento(){
        professores = new ArrayList<Professor>();
        turmas = new ArrayList<Turma>();
    }
    
    public void addProfessor(Professor _p){
        this.professores.add(_p);
    }

    public List getProfessores() {
        return this.professores;
    }
    
    
    /**
     * Pesquisa se existe um Professor pelo seu nome
     */
    public Professor getProfessorNome(String nome) throws ProfessorInexistenteException{
        for(Professor p: this.professores){
            if (p.getNome().equalsIgnoreCase(nome)) {
                return p;
            }
        }
        throw new ProfessorInexistenteException("Não foi encontrado nenhum Professor com o nome " + nome);
    }
    
    /**
     * Pesquisa se existe um Professor pela sua matrícula
     */
    public Professor getProfessorMat(String mat) throws ProfessorInexistenteException{
        for(Professor p: this.professores){
            if (p.getMatricula().equals(mat)) {
                return p;
            }
        }
        throw new ProfessorInexistenteException("Não foi possível encontrar nenhum professor com a matrícula " + mat);
    }
    
    /**
     * Pesquisa evidências de professores cadastrados através da parte de seus
     * nomes e retorna uma lista com os resultados encontrados.
     */
    public List<Professor> pesquisaProfessores(String nome) throws ProfessorInexistenteException{
        //TODO
        return null;
    }
    
    
    /**
     * Atualiza um Professor devidamente cadastrado.
     * Recebe o Professor atual (profAtual) e atualiza inserindo o "profModificado".
     */
    public void atualizaProfessor(Professor profAtual, Professor profModificado) 
            throws AtualizacaoDeProfessorException{
        
        if (profAtual != null && profModificado != null){
            if (professores.contains(profAtual)){
                professores.remove(profAtual);
                professores.add(profModificado);
            } else {
                throw new AtualizacaoDeProfessorException("Não foi possível encontrar o professor e atualizar seus dados,"
                        + "verifique e tente novamente.");
            }
        } else {
            throw new AtualizacaoDeProfessorException("Ocorreu um erro ao tentar atualizar os dados do professor,"
                    + " verifique as informações e tente novamente.");
        }
        
    }
    
    
    
    /**
     * Adiciona uma nova turma na estrutura de lista desta classe.
     */
    public void addTurma(Turma turma){
        turmas.add(turma);
    }
    
    
    /**
     * Procura por uma determinada Turma de acordo com sua identificação
     */
    public Turma getTurmaID(String id) throws TurmaInexistenteException{
        for(Turma t: this.turmas){
            if(t.getID().equals(id))
                return t;
        }
        throw new TurmaInexistenteException("Nenhuma turma com a identificação " + id + " foi encontrada.");
    }
    
    
    /**
     * Retorna uma estrutura List contendo todas as Turmas cadastradas.
     */
    public List<Turma> getTurmas(){
        return this.turmas;
    }
    
    
    /**
     * Percorre a lista de turmas cadastradas até encontrar ou não uma
     * Turma com sua ID igual ao "id" recebido no parâmetro, e então
     * chama o método da Turma encontrada afim de remover uma certa
     * quantidade (qtd) de alunos já cadastrados.
     */
    public void removerAlunos(String id, int qtd) throws TurmaInexistenteException, RemocaoDeAlunosImpossivelException{
        for(Turma t: this.turmas){
            if(t.getID().equals(id)) {
                t.removerAlunos(qtd);
                return;
            }
        }
        throw new TurmaInexistenteException("Nenhuma turma com a identicação " + id + " foi encontrada.");
    }
    
    /*
     * @param String com a identificação da turma
     * @param inteiro com a quantidade de alunos nessa turma
     * @return sem retorno
     * Método responsável por remover uma turma, se não existir retornar mensagem
     */
    public void removerTurma(String id) throws TurmaInexistenteException{
        
        for(Turma turma: this.turmas){
            
            if(turma.getID().equals(id)){
                this.turmas.remove(turma);
                return;
            }
        }
        throw new TurmaInexistenteException("Essa turma " + id + " não foi encontrada");
        
        
    }
    
    public void removerProfessorNome(String nome) throws RemocaoDeProfessorImpossivelException, ProfessorInexistenteException{
        for(Professor p : this.professores){
            if(p.getNome().equals(nome))
                this.professores.remove(p);
        }
        throw new RemocaoDeProfessorImpossivelException("Não foi possível remover o professor.");
    }

     public void removerProfessorMatricula(String matricula)throws RemocaoDeProfessorImpossivelException, ProfessorInexistenteException{
        for(Professor p : this.professores){
            if(p.getMatricula().equals(matricula))
                this.professores.remove(p);
        }
        throw new RemocaoDeProfessorImpossivelException("Não foi possível remover o professor.");
    }






    
}
